/**文件目录处理 */
import MFile from "./m-file";

/**配置类型定义 */
export interface IConfig {
  /**项目名称 */
  name: string;
  /**项目版本 */
  version: string;
  /**开源协议 */
  license?: string;
  /**安装包含目录 */
  files?: Array<string>;
  /**项目打包依赖 */
  dependencies?: Record<string, string>;
  /**项目本地依赖 */
  devDependencies?: Record<string, string>;
}

/**配置处理 */
export default class MConfig {
  /**包配置信息 */
  private static config: IConfig = { name: "", version: "" };

  /**加载配置 */
  public static async load() {
    const file = MFile.joinDirPath(MFile.getRoot(), "package.json");
    let res: IConfig = { name: "", version: "" };
    try {
      const jsonStr = await MFile.readFile(file);
      res = JSON.parse(jsonStr);
    } catch (err) {
      res = {} as IConfig;
    }
    MConfig.config = res;
    return MConfig;
  }

  /**获取配置中的项目名称 */
  public static getName() {
    return MConfig.config.name || "";
  }
  /**获取配置中的项目版本号 */
  public static getVersion() {
    return MConfig.config.version || "";
  }
  /**获取配置中的开源协议名称 */
  public static license() {
    return MConfig.config.license || "";
  }
  /**获取配置中的项安装包含目录 */
  public static files() {
    return MConfig.config.files || [];
  }
  /**获取配置中的打包依赖 */
  public static dependencies() {
    return MConfig.config.dependencies || {};
  }
  /**获取配置中的项本地依赖 */
  public static devDependencies() {
    return MConfig.config.devDependencies || {};
  }
}
